home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / share / pygtk / 2.0 / codegen / definitions.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2006-01-20  |  19KB  |  708 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.4)
  3.  
  4. import sys
  5. from copy import *
  6.  
  7. def get_valid_scheme_definitions(defs):
  8.     return _[1]
  9.  
  10.  
  11. class Parameter(object):
  12.     
  13.     def __init__(self, ptype, pname, pdflt, pnull, prop = None):
  14.         self.ptype = ptype
  15.         self.pname = pname
  16.         self.pdflt = pdflt
  17.         self.pnull = pnull
  18.  
  19.     
  20.     def __len__(self):
  21.         return 4
  22.  
  23.     
  24.     def __getitem__(self, i):
  25.         return (self.ptype, self.pname, self.pdflt, self.pnull)[i]
  26.  
  27.     
  28.     def merge(self, old):
  29.         if old.pdflt is not None:
  30.             self.pdflt = old.pdflt
  31.         
  32.         if old.pnull is not None:
  33.             self.pnull = old.pnull
  34.         
  35.  
  36.  
  37.  
  38. class Property(object):
  39.     
  40.     def __init__(self, pname, optional, argname):
  41.         self.pname = pname
  42.         self.optional = optional
  43.         self.argname = argname
  44.  
  45.     
  46.     def merge(self, old):
  47.         if old.optional is not None:
  48.             self.optional = old.optional
  49.         
  50.         if old.argname is not None:
  51.             self.argname = old.argname
  52.         
  53.  
  54.  
  55.  
  56. class Definition:
  57.     
  58.     def __init__(self, *args):
  59.         '''Create a new defs object of this type.  The arguments are the
  60. \tcomponents of the definition'''
  61.         raise RuntimeError, 'this is an abstract class'
  62.  
  63.     
  64.     def merge(self, old):
  65.         '''Merge in customisations from older version of definition'''
  66.         raise RuntimeError, 'this is an abstract class'
  67.  
  68.     
  69.     def write_defs(self, fp = sys.stdout):
  70.         '''write out this definition in defs file format'''
  71.         raise RuntimeError, 'this is an abstract class'
  72.  
  73.     
  74.     def guess_return_value_ownership(self):
  75.         '''return 1 if caller owns return value'''
  76.         if getattr(self, 'is_constructor_of', False):
  77.             self.caller_owns_return = True
  78.         elif self.ret in ('char*', 'gchar*', 'string'):
  79.             self.caller_owns_return = True
  80.         else:
  81.             self.caller_owns_return = False
  82.  
  83.  
  84.  
  85. class ObjectDef(Definition):
  86.     
  87.     def __init__(self, name, *args):
  88.         self.name = name
  89.         self.module = None
  90.         self.parent = None
  91.         self.c_name = None
  92.         self.typecode = None
  93.         self.fields = []
  94.         self.implements = []
  95.         self.class_init_func = None
  96.         for arg in get_valid_scheme_definitions(args):
  97.             if arg[0] == 'in-module':
  98.                 self.module = arg[1]
  99.                 continue
  100.             if arg[0] == 'parent':
  101.                 self.parent = arg[1]
  102.                 continue
  103.             if arg[0] == 'c-name':
  104.                 self.c_name = arg[1]
  105.                 continue
  106.             if arg[0] == 'gtype-id':
  107.                 self.typecode = arg[1]
  108.                 continue
  109.             if arg[0] == 'fields':
  110.                 for parg in arg[1:]:
  111.                     self.fields.append((parg[0], parg[1]))
  112.                 
  113.             if arg[0] == 'implements':
  114.                 self.implements.append(arg[1])
  115.                 continue
  116.         
  117.  
  118.     
  119.     def merge(self, old):
  120.         self.fields = old.fields
  121.         self.implements = old.implements
  122.  
  123.     
  124.     def write_defs(self, fp = sys.stdout):
  125.         fp.write('(define-object ' + self.name + '\n')
  126.         if self.module:
  127.             fp.write('  (in-module "' + self.module + '")\n')
  128.         
  129.         if self.parent != (None, None):
  130.             fp.write('  (parent "' + self.parent + '")\n')
  131.         
  132.         for interface in self.implements:
  133.             fp.write('  (implements "' + interface + '")\n')
  134.         
  135.         if self.c_name:
  136.             fp.write('  (c-name "' + self.c_name + '")\n')
  137.         
  138.         if self.typecode:
  139.             fp.write('  (gtype-id "' + self.typecode + '")\n')
  140.         
  141.         if self.fields:
  142.             fp.write('  (fields\n')
  143.             for ftype, fname in self.fields:
  144.                 fp.write('    \'("' + ftype + '" "' + fname + '")\n')
  145.             
  146.             fp.write('  )\n')
  147.         
  148.         fp.write(')\n\n')
  149.  
  150.  
  151.  
  152. class InterfaceDef(Definition):
  153.     
  154.     def __init__(self, name, *args):
  155.         self.name = name
  156.         self.module = None
  157.         self.c_name = None
  158.         self.typecode = None
  159.         self.vtable = None
  160.         self.fields = []
  161.         self.interface_info = None
  162.         for arg in get_valid_scheme_definitions(args):
  163.             if arg[0] == 'in-module':
  164.                 self.module = arg[1]
  165.                 continue
  166.             if arg[0] == 'c-name':
  167.                 self.c_name = arg[1]
  168.                 continue
  169.             if arg[0] == 'gtype-id':
  170.                 self.typecode = arg[1]
  171.                 continue
  172.             if arg[0] == 'vtable':
  173.                 self.vtable = arg[1]
  174.                 continue
  175.         
  176.         if self.vtable is None:
  177.             self.vtable = self.c_name + 'Iface'
  178.         
  179.  
  180.     
  181.     def write_defs(self, fp = sys.stdout):
  182.         fp.write('(define-interface ' + self.name + '\n')
  183.         if self.module:
  184.             fp.write('  (in-module "' + self.module + '")\n')
  185.         
  186.         if self.c_name:
  187.             fp.write('  (c-name "' + self.c_name + '")\n')
  188.         
  189.         if self.typecode:
  190.             fp.write('  (gtype-id "' + self.typecode + '")\n')
  191.         
  192.         fp.write(')\n\n')
  193.  
  194.  
  195.  
  196. class EnumDef(Definition):
  197.     
  198.     def __init__(self, name, *args):
  199.         self.deftype = 'enum'
  200.         self.name = name
  201.         self.in_module = None
  202.         self.c_name = None
  203.         self.typecode = None
  204.         self.values = []
  205.         for arg in get_valid_scheme_definitions(args):
  206.             if arg[0] == 'in-module':
  207.                 self.in_module = arg[1]
  208.                 continue
  209.             if arg[0] == 'c-name':
  210.                 self.c_name = arg[1]
  211.                 continue
  212.             if arg[0] == 'gtype-id':
  213.                 self.typecode = arg[1]
  214.                 continue
  215.             if arg[0] == 'values':
  216.                 for varg in arg[1:]:
  217.                     self.values.append((varg[0], varg[1]))
  218.                 
  219.         
  220.  
  221.     
  222.     def merge(self, old):
  223.         pass
  224.  
  225.     
  226.     def write_defs(self, fp = sys.stdout):
  227.         fp.write('(define-' + self.deftype + ' ' + self.name + '\n')
  228.         if self.in_module:
  229.             fp.write('  (in-module "' + self.in_module + '")\n')
  230.         
  231.         fp.write('  (c-name "' + self.c_name + '")\n')
  232.         fp.write('  (gtype-id "' + self.typecode + '")\n')
  233.         if self.values:
  234.             fp.write('  (values\n')
  235.             for name, val in self.values:
  236.                 fp.write('    \'("' + name + '" "' + val + '")\n')
  237.             
  238.             fp.write('  )\n')
  239.         
  240.         fp.write(')\n\n')
  241.  
  242.  
  243.  
  244. class FlagsDef(EnumDef):
  245.     
  246.     def __init__(self, *args):
  247.         apply(EnumDef.__init__, (self,) + args)
  248.         self.deftype = 'flags'
  249.  
  250.  
  251.  
  252. class BoxedDef(Definition):
  253.     
  254.     def __init__(self, name, *args):
  255.         self.name = name
  256.         self.module = None
  257.         self.c_name = None
  258.         self.typecode = None
  259.         self.copy = None
  260.         self.release = None
  261.         self.fields = []
  262.         for arg in get_valid_scheme_definitions(args):
  263.             if arg[0] == 'in-module':
  264.                 self.module = arg[1]
  265.                 continue
  266.             if arg[0] == 'c-name':
  267.                 self.c_name = arg[1]
  268.                 continue
  269.             if arg[0] == 'gtype-id':
  270.                 self.typecode = arg[1]
  271.                 continue
  272.             if arg[0] == 'copy-func':
  273.                 self.copy = arg[1]
  274.                 continue
  275.             if arg[0] == 'release-func':
  276.                 self.release = arg[1]
  277.                 continue
  278.             if arg[0] == 'fields':
  279.                 for parg in arg[1:]:
  280.                     self.fields.append((parg[0], parg[1]))
  281.                 
  282.         
  283.  
  284.     
  285.     def merge(self, old):
  286.         self.fields = old.fields
  287.  
  288.     
  289.     def write_defs(self, fp = sys.stdout):
  290.         fp.write('(define-boxed ' + self.name + '\n')
  291.         if self.module:
  292.             fp.write('  (in-module "' + self.module + '")\n')
  293.         
  294.         if self.c_name:
  295.             fp.write('  (c-name "' + self.c_name + '")\n')
  296.         
  297.         if self.typecode:
  298.             fp.write('  (gtype-id "' + self.typecode + '")\n')
  299.         
  300.         if self.copy:
  301.             fp.write('  (copy-func "' + self.copy + '")\n')
  302.         
  303.         if self.release:
  304.             fp.write('  (release-func "' + self.release + '")\n')
  305.         
  306.         if self.fields:
  307.             fp.write('  (fields\n')
  308.             for ftype, fname in self.fields:
  309.                 fp.write('    \'("' + ftype + '" "' + fname + '")\n')
  310.             
  311.             fp.write('  )\n')
  312.         
  313.         fp.write(')\n\n')
  314.  
  315.  
  316.  
  317. class PointerDef(Definition):
  318.     
  319.     def __init__(self, name, *args):
  320.         self.name = name
  321.         self.module = None
  322.         self.c_name = None
  323.         self.typecode = None
  324.         self.fields = []
  325.         for arg in get_valid_scheme_definitions(args):
  326.             if arg[0] == 'in-module':
  327.                 self.module = arg[1]
  328.                 continue
  329.             if arg[0] == 'c-name':
  330.                 self.c_name = arg[1]
  331.                 continue
  332.             if arg[0] == 'gtype-id':
  333.                 self.typecode = arg[1]
  334.                 continue
  335.             if arg[0] == 'fields':
  336.                 for parg in arg[1:]:
  337.                     self.fields.append((parg[0], parg[1]))
  338.                 
  339.         
  340.  
  341.     
  342.     def merge(self, old):
  343.         self.fields = old.fields
  344.  
  345.     
  346.     def write_defs(self, fp = sys.stdout):
  347.         fp.write('(define-pointer ' + self.name + '\n')
  348.         if self.module:
  349.             fp.write('  (in-module "' + self.module + '")\n')
  350.         
  351.         if self.c_name:
  352.             fp.write('  (c-name "' + self.c_name + '")\n')
  353.         
  354.         if self.typecode:
  355.             fp.write('  (gtype-id "' + self.typecode + '")\n')
  356.         
  357.         if self.fields:
  358.             fp.write('  (fields\n')
  359.             for ftype, fname in self.fields:
  360.                 fp.write('    \'("' + ftype + '" "' + fname + '")\n')
  361.             
  362.             fp.write('  )\n')
  363.         
  364.         fp.write(')\n\n')
  365.  
  366.  
  367.  
  368. class MethodDefBase(Definition):
  369.     
  370.     def __init__(self, name, *args):
  371.         dump = 0
  372.         self.name = name
  373.         self.ret = None
  374.         self.caller_owns_return = None
  375.         self.c_name = None
  376.         self.typecode = None
  377.         self.of_object = None
  378.         self.params = []
  379.         self.varargs = 0
  380.         self.deprecated = None
  381.         for arg in get_valid_scheme_definitions(args):
  382.             if arg[0] == 'of-object':
  383.                 self.of_object = arg[1]
  384.                 continue
  385.             if arg[0] == 'c-name':
  386.                 self.c_name = arg[1]
  387.                 continue
  388.             if arg[0] == 'gtype-id':
  389.                 self.typecode = arg[1]
  390.                 continue
  391.             if arg[0] == 'return-type':
  392.                 self.ret = arg[1]
  393.                 continue
  394.             if arg[0] == 'caller-owns-return':
  395.                 self.caller_owns_return = arg[1] in ('t', '#t')
  396.                 continue
  397.             if arg[0] == 'parameters':
  398.                 for parg in arg[1:]:
  399.                     ptype = parg[0]
  400.                     pname = parg[1]
  401.                     pdflt = None
  402.                     pnull = 0
  403.                     for farg in parg[2:]:
  404.                         if not isinstance(farg, tuple):
  405.                             raise AssertionError
  406.                         if farg[0] == 'default':
  407.                             pdflt = farg[1]
  408.                             continue
  409.                         if farg[0] == 'null-ok':
  410.                             pnull = 1
  411.                             continue
  412.                     
  413.                     self.params.append(Parameter(ptype, pname, pdflt, pnull))
  414.                 
  415.             if arg[0] == 'varargs':
  416.                 self.varargs = arg[1] in ('t', '#t')
  417.                 continue
  418.             if arg[0] == 'deprecated':
  419.                 self.deprecated = arg[1]
  420.                 continue
  421.             sys.stderr.write('Warning: %s argument unsupported.\n' % arg[0])
  422.             dump = 1
  423.         
  424.         if dump:
  425.             self.write_defs(sys.stderr)
  426.         
  427.         if self.caller_owns_return is None and self.ret is not None:
  428.             self.guess_return_value_ownership()
  429.         
  430.  
  431.     
  432.     def merge(self, old, parmerge):
  433.         self.caller_owns_return = old.caller_owns_return
  434.         self.varargs = old.varargs
  435.         if not parmerge:
  436.             self.params = deepcopy(old.params)
  437.             return None
  438.         
  439.         for i in range(len(self.params)):
  440.             (ptype, pname, pdflt, pnull) = self.params[i]
  441.             for p2 in old.params:
  442.                 if p2[1] == pname:
  443.                     self.params[i] = (ptype, pname, p2[2], p2[3])
  444.                     break
  445.                     continue
  446.             
  447.         
  448.  
  449.     
  450.     def _write_defs(self, fp = sys.stdout):
  451.         if self.of_object != (None, None):
  452.             fp.write('  (of-object "' + self.of_object + '")\n')
  453.         
  454.         if self.c_name:
  455.             fp.write('  (c-name "' + self.c_name + '")\n')
  456.         
  457.         if self.typecode:
  458.             fp.write('  (gtype-id "' + self.typecode + '")\n')
  459.         
  460.         if self.caller_owns_return:
  461.             fp.write('  (caller-owns-return #t)\n')
  462.         
  463.         if self.ret:
  464.             fp.write('  (return-type "' + self.ret + '")\n')
  465.         
  466.         if self.deprecated:
  467.             fp.write('  (deprecated "' + self.deprecated + '")\n')
  468.         
  469.         if self.params:
  470.             fp.write('  (parameters\n')
  471.             for ptype, pname, pdflt, pnull in self.params:
  472.                 fp.write('    \'("' + ptype + '" "' + pname + '"')
  473.                 if pdflt:
  474.                     fp.write(' (default "' + pdflt + '")')
  475.                 
  476.                 if pnull:
  477.                     fp.write(' (null-ok)')
  478.                 
  479.                 fp.write(')\n')
  480.             
  481.             fp.write('  )\n')
  482.         
  483.         if self.varargs:
  484.             fp.write('  (varargs #t)\n')
  485.         
  486.         fp.write(')\n\n')
  487.  
  488.  
  489.  
  490. class MethodDef(MethodDefBase):
  491.     
  492.     def __init__(self, name, *args):
  493.         MethodDefBase.__init__(self, name, *args)
  494.         for item in ('c_name', 'of_object'):
  495.             if self.__dict__[item] == None:
  496.                 self.write_defs(sys.stderr)
  497.                 raise RuntimeError, 'definition missing required %s' % (item,)
  498.                 continue
  499.         
  500.  
  501.     
  502.     def write_defs(self, fp = sys.stdout):
  503.         fp.write('(define-method ' + self.name + '\n')
  504.         self._write_defs(fp)
  505.  
  506.  
  507.  
  508. class VirtualDef(MethodDefBase):
  509.     
  510.     def write_defs(self, fp = sys.stdout):
  511.         fp.write('(define-virtual ' + self.name + '\n')
  512.         self._write_defs(fp)
  513.  
  514.  
  515.  
  516. class FunctionDef(Definition):
  517.     
  518.     def __init__(self, name, *args):
  519.         dump = 0
  520.         self.name = name
  521.         self.in_module = None
  522.         self.is_constructor_of = None
  523.         self.ret = None
  524.         self.caller_owns_return = None
  525.         self.c_name = None
  526.         self.typecode = None
  527.         self.params = []
  528.         self.varargs = 0
  529.         self.deprecated = None
  530.         for arg in get_valid_scheme_definitions(args):
  531.             if arg[0] == 'in-module':
  532.                 self.in_module = arg[1]
  533.                 continue
  534.             if arg[0] == 'is-constructor-of':
  535.                 self.is_constructor_of = arg[1]
  536.                 continue
  537.             if arg[0] == 'c-name':
  538.                 self.c_name = arg[1]
  539.                 continue
  540.             if arg[0] == 'gtype-id':
  541.                 self.typecode = arg[1]
  542.                 continue
  543.             if arg[0] == 'return-type':
  544.                 self.ret = arg[1]
  545.                 continue
  546.             if arg[0] == 'caller-owns-return':
  547.                 self.caller_owns_return = arg[1] in ('t', '#t')
  548.                 continue
  549.             if arg[0] == 'parameters':
  550.                 for parg in arg[1:]:
  551.                     ptype = parg[0]
  552.                     pname = parg[1]
  553.                     pdflt = None
  554.                     pnull = 0
  555.                     for farg in parg[2:]:
  556.                         if farg[0] == 'default':
  557.                             pdflt = farg[1]
  558.                             continue
  559.                         if farg[0] == 'null-ok':
  560.                             pnull = 1
  561.                             continue
  562.                     
  563.                     self.params.append(Parameter(ptype, pname, pdflt, pnull))
  564.                 
  565.             if arg[0] == 'properties':
  566.                 if self.is_constructor_of is None:
  567.                     print >>sys.stderr, 'Warning: (properties ...) is only valid for constructors'
  568.                 
  569.                 for prop in arg[1:]:
  570.                     pname = prop[0]
  571.                     optional = False
  572.                     argname = pname
  573.                     for farg in prop[1:]:
  574.                         if farg[0] == 'optional':
  575.                             optional = True
  576.                             continue
  577.                         if farg[0] == 'argname':
  578.                             argname = farg[1]
  579.                             continue
  580.                     
  581.                     self.params.append(Property(pname, optional, argname))
  582.                 
  583.             if arg[0] == 'varargs':
  584.                 self.varargs = arg[1] in ('t', '#t')
  585.                 continue
  586.             if arg[0] == 'deprecated':
  587.                 self.deprecated = arg[1]
  588.                 continue
  589.             sys.stderr.write('Warning: %s argument unsupported\n' % (arg[0],))
  590.             dump = 1
  591.         
  592.         if dump:
  593.             self.write_defs(sys.stderr)
  594.         
  595.         if self.caller_owns_return is None and self.ret is not None:
  596.             self.guess_return_value_ownership()
  597.         
  598.         for item in ('c_name',):
  599.             if self.__dict__[item] == None:
  600.                 self.write_defs(sys.stderr)
  601.                 raise RuntimeError, 'definition missing required %s' % (item,)
  602.                 continue
  603.         
  604.  
  605.     _method_write_defs = MethodDef.__dict__['write_defs']
  606.     
  607.     def merge(self, old, parmerge):
  608.         self.caller_owns_return = old.caller_owns_return
  609.         self.varargs = old.varargs
  610.         if not parmerge:
  611.             self.params = deepcopy(old.params)
  612.             return None
  613.         
  614.         
  615.         def merge_param(param):
  616.             for old_param in old.params:
  617.                 if old_param.pname == param.pname:
  618.                     if isinstance(old_param, Property):
  619.                         return deepcopy(old_param)
  620.                     else:
  621.                         param.merge(old_param)
  622.                         return param
  623.                 isinstance(old_param, Property)
  624.             
  625.             raise param.pname, [] % ([], [ p.pname for p in old.params ])
  626.  
  627.         
  628.         try:
  629.             self.params = map(merge_param, self.params)
  630.         except RuntimeError:
  631.             self.params = deepcopy(old.params)
  632.  
  633.         if not self.is_constructor_of:
  634.             
  635.             try:
  636.                 self.is_constructor_of = old.is_constructor_of
  637.             except AttributeError:
  638.                 pass
  639.             except:
  640.                 None<EXCEPTION MATCH>AttributeError
  641.             
  642.  
  643.         None<EXCEPTION MATCH>AttributeError
  644.         if isinstance(old, MethodDef):
  645.             self.name = old.name
  646.             self.write_defs = self._method_write_defs
  647.             self.of_object = old.of_object
  648.             del self.params[0]
  649.         
  650.  
  651.     
  652.     def write_defs(self, fp = sys.stdout):
  653.         fp.write('(define-function ' + self.name + '\n')
  654.         if self.in_module:
  655.             fp.write('  (in-module "' + self.in_module + '")\n')
  656.         
  657.         if self.is_constructor_of:
  658.             fp.write('  (is-constructor-of "' + self.is_constructor_of + '")\n')
  659.         
  660.         if self.c_name:
  661.             fp.write('  (c-name "' + self.c_name + '")\n')
  662.         
  663.         if self.typecode:
  664.             fp.write('  (gtype-id "' + self.typecode + '")\n')
  665.         
  666.         if self.caller_owns_return:
  667.             fp.write('  (caller-owns-return #t)\n')
  668.         
  669.         if self.ret:
  670.             fp.write('  (return-type "' + self.ret + '")\n')
  671.         
  672.         if self.deprecated:
  673.             fp.write('  (deprecated "' + self.deprecated + '")\n')
  674.         
  675.         if self.params:
  676.             if isinstance(self.params[0], Parameter):
  677.                 fp.write('  (parameters\n')
  678.                 for ptype, pname, pdflt, pnull in self.params:
  679.                     fp.write('    \'("' + ptype + '" "' + pname + '"')
  680.                     if pdflt:
  681.                         fp.write(' (default "' + pdflt + '")')
  682.                     
  683.                     if pnull:
  684.                         fp.write(' (null-ok)')
  685.                     
  686.                     fp.write(')\n')
  687.                 
  688.                 fp.write('  )\n')
  689.             elif isinstance(self.params[0], Property):
  690.                 fp.write('  (properties\n')
  691.                 for prop in self.params:
  692.                     fp.write('    \'("' + prop.pname + '"')
  693.                     if prop.optional:
  694.                         fp.write(' (optional)')
  695.                     
  696.                     fp.write(')\n')
  697.                 
  698.                 fp.write('  )\n')
  699.             elif not False:
  700.                 raise AssertionError, 'strange parameter list %r' % self.params[0]
  701.         
  702.         if self.varargs:
  703.             fp.write('  (varargs #t)\n')
  704.         
  705.         fp.write(')\n\n')
  706.  
  707.  
  708.